var MyModules = (function() {
	var modules = {};

	function define(name, deps, func) {
		for (var i = 0; i < deps.length; i++) {
			deps[i] = modules[deps[i]];
		}
		modules[name] = func.apply(func, deps);
	}

	function get(name) {
		return modules[name];
	}

	return {
		define: define,
		get: get
	}
})();


MyModules.define('bar', [], function() {
	function hello(arg) {
		return 'hello ' + arg;
	}

	return {
		hello: hello
	}
});

MyModules.define('foo', ['bar'], function(bar) {
	var text = 'haha';

	function say() {
		console.log(bar.hello(text).toUpperCase());
	}

	return {
		say: say
	}
});

var bar = MyModules.get('bar');
var foo = MyModules.get('foo');

console.log(bar.hello('world')); // hello world
foo.say(); // HELLO HAHA